package com.maisuiit.singleton;

/**
 * 单例模式-双重校验
 * @Author: zhangcc
 * @CreateTime: 2024-02-05
 */
public class Singleton04 {

    // 1. 私有构造方法
    private Singleton04() {
    }

    // 使用 volatile保证变量的可见性
    private volatile static Singleton04 instance;

    // 3. 通过添加synchronize,保证多线程模式下的单例对象的唯一性
    public static Singleton04 getInstance() {
        if (instance == null) {
            // 第一次判断,如果instance不为null,不进入抢锁阶段,直接返回实例
            synchronized (Singleton04.class) {
                // 抢到锁之后再次进行判断是否为null
                if (instance == null) {
                    instance = new Singleton04();
                }
            }
        }
        return instance;
    }
}
